home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / NextAnswers / 2085_rc.cdrom_for_NetInstalling_with_Additional_Drivers.txt < prev    next >
Text File  |  1995-12-10  |  12KB  |  506 lines

  1. #!/bin/sh -u
  2. #
  3. # CD-ROM Software Installation Procedure
  4. #
  5. # Copyright (C) 1994 by NeXT Computer, Inc.  All rights reserved.
  6. #
  7. # This script is invoked automatically when booted from a CD-ROM.
  8. # Trying to run it directly will probably not do what you expect.
  9. #
  10. # This script has been modified starting at line 422. Is is NeXTanser
  11. # document #2085. See NeXTanswer 2084_NetInstalling_with_Additional_Drivers
  12. # for information on the use of this script
  13. #
  14. clear() {
  15.    echo -n "\f"
  16. }
  17.  
  18. (
  19. # Exit with status 1 if we get a SIGINT (from, e.g., a ^C being typed).
  20. trap "exit 1" 2
  21.  
  22. . /.profile
  23.  
  24. # Check to be sure we're running from a CD-ROM
  25.  
  26. CDDIR=${ROOT}/NextCD
  27.  
  28. if [ ! -d ${CDDIR} ]; then 
  29.     echo
  30.     echo "This program is for installing NEXTSTEP on a hard disk when the"
  31.     echo "NEXTSTEP CD-ROM is the startup disk.  Since the NEXTSTEP CD-ROM"
  32.     echo "isn't the startup disk, you can't use this program."
  33.     exit 1
  34. fi
  35.  
  36. ROOT=
  37. export ROOT
  38.  
  39. # In case we had a custom file
  40. CDIS_DIR=${ROOT}/${CDDIR}/CDIS
  41.  
  42. AWK=${ROOT}/bin/awk
  43. ARCH=`${ROOT}/usr/bin/arch`
  44. CHECKFLOP=${CDIS_DIR}/checkflop
  45. CHMOD=${ROOT}/bin/chmod
  46. CAT=${ROOT}/bin/cat
  47. CP=${ROOT}/bin/cp
  48. DISK=${ROOT}/usr/etc/disk
  49. DITTO=${CDIS_DIR}/ditto
  50. EXPR=${ROOT}/bin/expr
  51. FINDROOT=${CDIS_DIR}/findroot
  52. FDISK=${ROOT}/usr/etc/fdisk
  53. GREP=${ROOT}/bin/grep
  54. HALT=${ROOT}/usr/etc/halt
  55. ITAR=${ROOT}/NextAdmin/Installer.app/installer_bigtar
  56. LOCALECHO=${CDIS_DIR}/localecho
  57. LN=${ROOT}/bin/ln
  58. MINSIZE=75
  59. MKDIRS=${ROOT}/bin/mkdirs
  60. MKFILE=${ROOT}/usr/etc/mkfile
  61. MOUNT=${ROOT}/usr/etc/mount
  62. MV=${ROOT}/bin/mv
  63. PICKDISK=${CDIS_DIR}/pickdisk
  64. REBOOT=${ROOT}/usr/etc/reboot
  65. RM=${ROOT}/bin/rm
  66. SED=${ROOT}/bin/sed
  67. STTY=${ROOT}/bin/stty
  68. SWAPON=${ROOT}/usr/etc/mach_swapon
  69. SYNC=${ROOT}/bin/sync
  70. SYSCONFIG=${CDIS_DIR}/sysconfig
  71. TABLE=${CDIS_DIR}/table
  72. TAR=${ROOT}/usr/bin/gnutar
  73. HD=/private/tmp/mnta
  74. FD=/private/tmp/mntb
  75. VERFILE=${ROOT}/usr/lib/NextStep/software_version
  76. ZCAT=${ROOT}/usr/ucb/zcat
  77.  
  78. # Clean up output
  79. ${STTY} -tabs
  80.  
  81. # check software_version file
  82. echo -n "NEXTSTEP Release "
  83. realversion=`$AWK 'NR==1{print $1}' $VERFILE`
  84. echo $realversion
  85. version=`$AWK 'NR==1{print $1}' $VERFILE | $SED 's/^[\.0-9]*//' `
  86.  
  87. LANGUAGE=`${SYSCONFIG} Language`
  88. if [ "${LANGUAGE}" = "" -o "${LANGUAGE}" = "No language selected" ]
  89. then
  90.     reply=""
  91.     while [ -z "$reply" ]
  92.     do
  93.     clear
  94.     echo
  95.     echo "Type 1 to use the English language and USA keyboard while installing NEXTSTEP."
  96.     echo
  97.     echo "Tapez 2 pour installer NEXTSTEP avec un clavier et des messages francais."
  98.     echo
  99.     echo "Eingabe 3 fuer NEXTSTEP-Installation mit deutscher Sprache und Tastatur."
  100.     echo
  101.     echo "Premi 4 per installare NEXTSTEP usando lingua italiana e tastiera italiana."
  102.     echo
  103.     echo "Pulse 5 para usar el idioma y el teclado espanol en la instalacion de NEXTSTEP."
  104.     echo
  105.     echo "Skriv 6 for att anvanda svenska/svenskt tangentbord vid installation av NEXTSTEP."
  106.         echo
  107.     echo -n "---> "
  108.     read reply
  109.     case "$reply" in
  110.     1)    LANGUAGE=English
  111.         break;;
  112.     2)    LANGUAGE=French
  113.         break;;
  114.     3)    LANGUAGE=German
  115.         break;;
  116.     4)    LANGUAGE=Italian
  117.         break;;
  118.     5)    LANGUAGE=Spanish
  119.         break;;
  120.     6)    LANGUAGE=Swedish
  121.         break;;
  122.     *)    reply=""
  123.         clear
  124.         continue;;
  125.     esac
  126.     done
  127. fi
  128.  
  129. # Let localecho know what our language is...
  130. export LANGUAGE
  131.  
  132. reply=""
  133. while [ -z "$reply" ]
  134. do
  135.    clear
  136.    ${LOCALECHO} BOOT_DISK
  137.    echo
  138.  
  139.    ${PICKDISK} 0
  140.    numdisks=$?
  141.    
  142.    if [ $numdisks = 255 ]
  143.    then
  144.         ${LOCALECHO} INSTALLFAILED
  145.         echo
  146.         ${LOCALECHO} QUITTING
  147.         ${HALT} -e
  148.    fi
  149.    echo
  150.    ${LOCALECHO} WHICH_DISK
  151.    echo
  152.    echo -n "---> "
  153.    read reply
  154.    if [ "$reply" = 1 -o "$reply" = 2 ]
  155.    then
  156.       continue
  157.    else
  158.       reply=""
  159.       continue
  160.    fi
  161. done
  162.  
  163. if [ "$reply" = 2 ]
  164. then
  165.    reply=""
  166.    while [ -z "$reply" ]
  167.    do
  168.       clear
  169.       ${LOCALECHO} AVAILABLE_DISKS
  170.       echo
  171.  
  172.       ${PICKDISK}
  173.       numdisks=$?
  174.  
  175.       if [ $numdisks = 255 ]
  176.       then
  177.                ${LOCALECHO} INSTALLFAILED
  178.                echo
  179.                ${LOCALECHO} QUITTING
  180.                ${HALT} -e
  181.       fi
  182.       echo
  183.       ${LOCALECHO} ALL_DISKS
  184.       echo
  185.       echo -n "---> "
  186.       read reply
  187.       if [ "$reply" -ge 1 -a "$reply" -le "$numdisks" ]
  188.       then
  189.          continue
  190.       else
  191.          reply=""
  192.          continue
  193.       fi
  194.    done
  195. fi
  196.  
  197. disknum=$reply
  198. diskie=`${PICKDISK} ${disknum}`
  199.  
  200. rawdisk=/dev/r${diskie}
  201. livedisk=`echo $rawdisk | ${SED} s/a/h/`
  202.  
  203. if [ "${ARCH}" = "i386" ]; then
  204.    reply=""
  205.    while [ -z "$reply" ]
  206.    do
  207.       ispartitioned=`${FDISK} $livedisk -isDiskPartitioned`
  208.       disksize=`${FDISK} $livedisk -diskSize`
  209.       if [ $ispartitioned = "Yes" ]
  210.       then
  211.      currentsize=`${FDISK} $livedisk -installSize`
  212.      freesize=`${FDISK} $livedisk -freeSpace`
  213.      esize=`${FDISK} $livedisk -sizeofExtended`
  214.       else
  215.      currentsize=0
  216.      freesize=0
  217.      esize=0
  218.       fi
  219.       choices=2
  220.       freenum=0
  221.       enum=0
  222.       currentnum=0
  223.       if [ $currentsize -ge $MINSIZE -a $currentsize -ne $disksize ]
  224.       then
  225.      choices=`$EXPR $choices + 1`
  226.      currentnum=$choices
  227.       fi
  228.       if [ $currentnum -eq 0 -a $freesize -ge $MINSIZE -a $freesize -ne $disksize ]
  229.       then
  230.      choices=`$EXPR $choices + 1`
  231.      freenum=$choices
  232.       fi
  233.       if [ $currentnum -eq 0 -a $esize -ge $MINSIZE ]
  234.       then
  235.      choices=`$EXPR $choices + 1`
  236.      enum=$choices
  237.       fi
  238.       choices=`$EXPR $choices + 1`
  239.       
  240.       clear
  241.       eval `${LOCALECHO} FDISK_MENU1`
  242.       eval `${LOCALECHO} FDISK_MENU2`
  243.       if [ $currentnum -ne 0 ]
  244.       then
  245.      eval `${LOCALECHO} FDISK_MENU3`
  246.       fi
  247.       if [ $freenum -ne 0 ]
  248.       then
  249.      eval `${LOCALECHO} FDISK_MENU4`
  250.       fi
  251.       if [ $enum -ne 0 ]
  252.       then
  253.      eval `${LOCALECHO} FDISK_MENU5`
  254.       fi
  255.       eval `${LOCALECHO} FDISK_MENU6`
  256.  
  257.       echo
  258.       echo -n "---> "
  259.       read reply
  260.       if [ "$reply" -ge 1 -a "$reply" -le $choices ]
  261.       then
  262.      echo
  263.      case "${reply}" in
  264.            1)         FDISK_FLAGS="-removePartitioning" ;;
  265.            2)         ${LOCALECHO} -q HOW_MUCH
  266.                   read resp2
  267.                               reply=""
  268.                   newsize=`${EXPR} $disksize - $resp2`
  269.                               if [ $? != 0 ]; then
  270.                        continue
  271.                   fi
  272.                               if [ $newsize -gt $MINSIZE ]; then
  273.                  FDISK_FLAGS="-dosPlusNeXT ${resp2}"
  274.                   else
  275.                  ${LOCALECHO} TOO_SMALL
  276.                  continue
  277.                   fi ;;
  278.            $currentnum)    continue ;;
  279.            $freenum)    FDISK_FLAGS="-setAvailableToNeXT" ;;
  280.            $enum)        resp2=`${FDISK} $livedisk -sizeofExtended`
  281.                   if [ $resp2 -gt $MINSIZE ]; then
  282.                  FDISK_FLAGS="-setExtendedToNeXT"
  283.                   else
  284.                  ${LOCALECHO} TOO_SMALL
  285.                  reply=""
  286.                  continue
  287.                   fi ;;
  288.            $choices)    ${FDISK} $livedisk
  289.                   reply=""
  290.                   continue ;;
  291.            *)        reply=""
  292.                   continue ;;
  293.      esac
  294.    
  295.      ${FDISK} $livedisk ${FDISK_FLAGS}
  296.      currentsize=`${FDISK} $livedisk -installSize`
  297.  
  298.      if [ -z "$reply" ]; then
  299.         continue
  300.          fi
  301.          if [ -z "$currentsize" -o ${currentsize} -lt $MINSIZE ]; then
  302.            ${LOCALECHO} TOO_SMALL
  303.            reply=""
  304.            continue
  305.      else
  306.            break
  307.      fi
  308.       else
  309.      reply=""
  310.       fi
  311.    done
  312. fi     
  313.  
  314. reply=""
  315. while [ -z "$reply" ]
  316. do
  317.    clear
  318.    ${LOCALECHO} READY
  319.    echo
  320.    echo -n "---> "
  321.    read reply
  322.    
  323.    case $reply in
  324.       1) continue;;
  325.       2) echo
  326.      ${LOCALECHO} QUITTING
  327.      ${HALT} -e
  328.      exit 1;;
  329.       *) reply="";;
  330.    esac
  331. done
  332.  
  333. # Get off the disk before we initialize it!
  334. clear
  335. ${LOCALECHO} GOING
  336. cd ${CDDIR}
  337.  
  338. ROOTDEV=`${FINDROOT}`
  339.  
  340. if [ $? -ne 0 ]; then
  341.       ROOTTYPE=nfs
  342. else
  343.       ROOTTYPE=4.3
  344. fi
  345.  
  346. ${DISK} -i $livedisk >> /dev/null
  347.     
  348. if [ $? -ne 0 ]; then
  349.     echo
  350.     ${LOCALECHO} INITFAILED
  351.     echo
  352.     ${LOCALECHO} QUITTING
  353.     echo
  354.     ${SYNC} ; ${REBOOT}
  355.     exit 1
  356. fi
  357.  
  358. ${MOUNT} -n /dev/$diskie ${HD} >> /dev/null
  359.  
  360. ${MKDIRS} ${HD}/private/vm
  361. ${MKDIRS} ${HD}/private/tmp
  362.  
  363. ${MKFILE} 16m ${HD}/private/vm/swapfile
  364. ${SWAPON} -o nocompress ${HD}/private/vm/swapfile
  365.  
  366. ${DITTO} -T -arch ${ARCH} -bom /usr/lib/NextStep/BaseSystem.bom -outBom ${HD}/BaseSystem.bom / ${HD}
  367. ${MV} ${HD}/BaseSystem.bom ${HD}/usr/lib/NextStep/BaseSystem.bom
  368.  
  369. RECEIPT_DIR=/NextLibrary/Receipts
  370.  
  371. if [ "${LANGUAGE}" != "English" ]; then
  372.     ${DITTO} -T -arch ${ARCH} -bom ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom -outBom ${HD}/${LANGUAGE}Essentials.bom / ${HD}
  373.     ${MKDIRS} ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg
  374.     ${DITTO} ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg
  375.     ${MV} ${HD}/${LANGUAGE}Essentials.bom ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom
  376. fi
  377.  
  378. echo
  379.  
  380. echo "/dev/${diskie} / 4.3 rw,noquota,noauto 0 1" > ${HD}/private/etc/fstab
  381.  
  382. # Set permissions on / and /private/tmp
  383. ${CHMOD} 1777 ${HD}
  384. ${CHMOD} 1777 ${HD}/private/tmp
  385.  
  386. if [ "${ROOTTYPE}" = "4.3" ]; then
  387. echo "${ROOTDEV} /NEXTSTEP_INSTALL 4.3 ro,noquota 0 2" \
  388.    >> ${HD}/private/etc/fstab
  389. fi
  390.  
  391. CUSTOM_FILE=/private/adm/CDIS.custom
  392. echo "LANGUAGE=${LANGUAGE}" > ${HD}${CUSTOM_FILE}
  393.  
  394. if [ "${ARCH}" != "m68k" ]; then
  395.  
  396.    # Set up /private/Devices symlink
  397.    ${LN} -s Drivers/${ARCH} ${HD}/private/Devices
  398.  
  399.    DEFAULT_FILE=/usr/Devices/System.config/Default.table
  400.  
  401.    # Write out CDIS.custom file
  402.    ${MKDIRS} ${HD}/usr/Devices/System.config
  403.    echo "ROOT=${ROOT}" >> ${HD}${CUSTOM_FILE}
  404.    if [ "${ARCH}" = "i386" ]; then
  405.       echo "FDISK_FLAGS=${FDISK_FLAGS}" >> ${HD}${CUSTOM_FILE}
  406.    fi
  407.    echo "diskie=${diskie}" >> ${HD}${CUSTOM_FILE}
  408.  
  409.    BOOTDRIVERS=`${SYSCONFIG} -c -a ${ARCH}`
  410.    ${CP} ${ROOT}/private/Drivers/${ARCH}/System.config/Default.table ${HD}/usr/Devices/System.config/Default.install
  411.    ${GREP} -v 'Boot Drivers' ${HD}/usr/Devices/System.config/Default.install > ${HD}${DEFAULT_FILE}
  412.    echo "\"Boot Drivers\" = \"${BOOTDRIVERS}\";" >> ${HD}${DEFAULT_FILE}
  413.    echo "\"Language\" = \"${LANGUAGE}\";" >> ${HD}${DEFAULT_FILE}
  414.    
  415.    INSTALLHINTS=${HD}/usr/Devices/System.config/InstallHints
  416.    /bin/rm -rf ${INSTALLHINTS}
  417.    /bin/mkdir ${INSTALLHINTS}
  418.    for driver in ${BOOTDRIVERS}
  419.    do
  420.      ${SYSCONFIG} -d ${driver} > ${INSTALLHINTS}/${driver}.table 2>>/dev/null
  421.    done
  422.    ${CHMOD} -R 777 ${INSTALLHINTS}
  423.  
  424. # This routine will automatically install drivers located in 
  425. # directory named /RELEASED_DRIVERS (placed into the install image)
  426. # to the hard disk of the machine being installed.
  427. # Added by Scott Vail 1995
  428.  
  429.   if [ "${ARCH}" = "i386" ]; then
  430.     if [ -d /RELEASED_DRIVERS ]; then
  431.     oldir=`/bin/pwd`
  432.     packages=`/bin/ls /RELEASED_DRIVERS/*.pkg/*.tar.Z`
  433.     cd ${HD}
  434.     echo
  435.     echo "Installing Device Drivers"
  436.     for name in $packages
  437.     do
  438.         bom=`echo $name|sed 's/tar\.Z/bom/'`
  439.         ${ZCAT} $name | ${ITAR} -xpfT - $bom
  440.     done
  441.     if [ -d ${HD}/private/Drivers/i386/ISASerialPort.config -a \
  442.          -d ${HD}/private/Drivers/i386/SerialPointingDevice.config ] ; then
  443.         ${CAT} ${HD}/private/Drivers/i386/System.config/Default.table | \
  444.         ${SED} 's/SerialMouse/SerialPointingDevice/' | \
  445.         ${SED} 's/SerialPorts/ISASerialPort/' > \
  446.         ${HD}/tmp/Default.table
  447.  
  448.         ${MV} ${HD}/tmp/Default.table ${HD}/private/Drivers/i386/System.config
  449.     fi
  450.     cd $oldir
  451.     fi
  452.   fi
  453.  
  454. # -------------------
  455.    # fixup Default.table if we did not boot from it.
  456.    for i in ${BOOTDRIVERS}
  457.    do
  458.         # does the table exist?
  459.         (${SYSCONFIG} -d $i | ${GREP} '"Default Table"')  >> /dev/null 2>&1
  460.     STATUS=$?
  461.     
  462.     if [ ${STATUS} -eq 0 ]; then
  463.         # now grok it to get the driver name out
  464.         DEFAULTTABLE=`${SYSCONFIG} -d $i 2>>/dev/null | \
  465.             ${GREP} '"Default Table"' | \
  466.         ${AWK} -F= '{print $2}' | ${SED} 's/"//g' | \
  467.         ${SED} 's/;//g' | ${SED} 's/ //g'`
  468.         if [ "${DEFAULTTABLE}" != "Default" ];
  469.             then
  470.                 DEST=${HD}/usr/Devices/${i}.config
  471.                 if [ -d ${DEST} ]; then
  472.             cd ${DEST}
  473.             ${MV} Default.table Install.table
  474.             ${MV} ${DEFAULTTABLE}.table Default.table
  475.     
  476.             for lang in *.lproj
  477.             do
  478.             ${MV} ${lang}/Localizable.strings ${lang}/Install.strings
  479.             ${MV} ${lang}/${DEFAULTTABLE}.strings ${lang}/Localizable.strings
  480.             done
  481.         fi
  482.             fi
  483.     fi
  484.    done
  485.  
  486. # -------------------
  487.  
  488. fi
  489.  
  490. ${SYNC}
  491.  
  492. echo
  493. ${CHECKFLOP} && ${DISK} -e /dev/rfd0a
  494. ${LOCALECHO} DONE
  495. if [ "${ARCH}" = "i386" ]; then
  496.     ${LOCALECHO} -q REMOVE_FLOPPY
  497. else
  498.     ${LOCALECHO} -q RESTART
  499. fi
  500. read glop
  501.    ${LOCALECHO} RESTARTING
  502.    ${REBOOT} 'sd -'
  503.     exit 1
  504. ) < /dev/console >> /dev/console 2>&1
  505. exit 0
  506.